package org.example.shoppingmall.service.impl;

import org.example.shoppingmall.dao.UserDao;
import org.example.shoppingmall.entity.User;
import org.example.shoppingmall.service.UserService;
import org.example.shoppingmall.util.JWTUtil;
import org.example.shoppingmall.util.RedisUtil;

public class UserServiceImpl implements UserService {
    UserDao userDao = new UserDao();
    /**
     * 注册
     * @param user
     * @return
     */
    @Override
    public boolean addUser(User user) {
        // 检查用户名和邮箱是否已经存在
        if (userDao.isUsernameExists(user.getUsername())) {
            // 用户名已存在，返回注册失败
            return false;
        }
        if (userDao.isEmailExists(user.getEmail())) {
            // 邮箱已存在，返回注册失败
            return false;
        }

        // 用户名和邮箱均不存在，可以进行注册
        return userDao.insertUser(user);
    }

    /**
     * 登录
     * @param username
     * @param password
     * @return
     */
    @Override
    public String login(String username, String password) {
        User user = userDao.getUserByUsernameAndPassword(username, password);
        if (user != null) {
            String userId = String.valueOf(user.getId());
            String existingToken = RedisUtil.get(userId);
            if (existingToken != null) {
                // 如果 Redis 中已存在该用户的 token，则使其失效
                RedisUtil.delete(existingToken); // 删除旧 token
            }

            // 生成新的 token，并存储到 Redis
            String newToken = JWTUtil.generateToken(userId);
            RedisUtil.set(newToken, userId, 3600); // 存储新 token 并设置过期时间
            RedisUtil.set(userId,newToken, 3600); // 存储新 token 并设置过期时间

            return newToken;
        }
        return null;
    }

    /**
     * 退出登录
     * @param token
     */
    @Override
    public void logout(String token) {
        RedisUtil.delete(token);
    }

    /**
     * 获取用户信息
     * @param token
     * @return
     */
    @Override
    public User getUserInfo(String token) {
        String userId = RedisUtil.get(token);
        if (userId != null) {
            return userDao.getUserById(userId);
        }
        return null;
    }
    /**
     * 修改用户信息
     * @param token
     * @return
     */
    @Override
    public Boolean infoRevise(String token,String email,String nickname, String phone) {
        String userId = RedisUtil.get(token);
        if(userId != null){
            return userDao.updateUserByID(userId,email,nickname,phone);
        }
        return false;
    }

    /**
     * 用户申请升级
     * @param token
     * @return
     */
    @Override
    public boolean upGrade(String token) {
        String userId = RedisUtil.get(token);
        if(userId != null){
            return userDao.upGrade(userId);
        }
        return false;
    }

    @Override
    public boolean uploadAvatar(String token, String avatar) {
        String userId = RedisUtil.get(token);
        if(userId != null){
            return userDao.uploadAvatar(userId,avatar);
        }
        return false;
    }
}
